package me.legrange.panstamp.gui;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import me.legrange.panstamp.Endpoint;
import me.legrange.panstamp.NetworkException;
import me.legrange.panstamp.PanStamp;
import me.legrange.panstamp.gui.model.DoubleDocument;
import me.legrange.panstamp.gui.model.IntegerDocument;
/**
*
* @author gideon
*/
public class SetValueDialog extends javax.swing.JDialog {
/**
* Creates new form SetValueDialog
*/
public SetValueDialog(java.awt.Frame parent, Endpoint ep) {
super(parent, true);
this.ep = ep;
initComponents();
setLocationRelativeTo(null);
initUnitsCombo();
valueTextField.setVisible(ep.getType() != Endpoint.Type.BINARY);
valueCheckBox.setVisible(ep.getType() == Endpoint.Type.BINARY);
}
/**
* return the units available for this endpoint
*/
private void initUnitsCombo() {
ComboBoxModel cbm = new DefaultComboBoxModel(ep.getUnits().toArray(new String[]{}));
switch (cbm.getSize()) {
case 0:
unitComboBox.setEnabled(false);
break;
case 1:
cbm.setSelectedItem(ep.getUnit());
unitComboBox.setEnabled(false);
break;
default:
cbm.setSelectedItem(ep.getUnit());
}
unitComboBox.setModel(cbm);
}
/**
* return the document for editing this endpoint
*/
private Document getDocument() {
switch (ep.getType()) {
case BINARY:
case STRING:
case BYTE_ARRAY :
return new PlainDocument();
case INTEGER:
return new IntegerDocument(Integer.MIN_VALUE, Integer.MAX_VALUE);
case NUMBER:
return new DoubleDocument(Double.MIN_VALUE, Double.MAX_VALUE);
}
return new PlainDocument();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
configTabs = new javax.swing.JTabbedPane();
networkPanel = new javax.swing.JPanel();
valueLabel = new javax.swing.JLabel();
valueTextField = new javax.swing.JTextField();
unitsLabel = new javax.swing.JLabel();
unitComboBox = new javax.swing.JComboBox();
valueCheckBox = new javax.swing.JCheckBox();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Set Value");
setResizable(false);
valueLabel.setText("Value:");
valueTextField.setDocument(getDocument());
unitsLabel.setText("Unit:");
javax.swing.GroupLayout networkPanelLayout = new javax.swing.GroupLayout(networkPanel);
networkPanel.setLayout(networkPanelLayout);
networkPanelLayout.setHorizontalGroup(
networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(networkPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(networkPanelLayout.createSequentialGroup()
.addComponent(unitsLabel)
.addGap(18, 18, 18)
.addComponent(unitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(networkPanelLayout.createSequentialGroup()
.addComponent(valueLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(valueTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(valueCheckBox)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
networkPanelLayout.setVerticalGroup(
networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(networkPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(unitsLabel)
.addComponent(unitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(valueCheckBox)
.addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(valueLabel)
.addComponent(valueTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
configTabs.addTab(String.format("Set value for %s", ep.getName()), networkPanel);
okButton.setText("OK");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(configTabs)
.addGroup(layout.createSequentialGroup()
.addComponent(okButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(cancelButton)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(configTabs)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cancelButton)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(okButton)
.addContainerGap())))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
try {
if ((ep.getType() != Endpoint.Type.BINARY) && valueTextField.getText().isEmpty()) {
return;
}
Object unit = unitComboBox.getSelectedItem();
switch (ep.getType()) {
case NUMBER:
if (unit != null) {
ep.setValue(unitComboBox.getSelectedItem().toString(), Double.valueOf(valueTextField.getText()));
} else {
ep.setValue(Double.valueOf(valueTextField.getText()));
}
break;
case INTEGER:
if (unit != null) {
ep.setValue(unitComboBox.getSelectedItem().toString(), Integer.parseInt(valueTextField.getText()));
} else {
ep.setValue(Integer.parseInt(valueTextField.getText()));
}
break;
case STRING:
ep.setValue(valueTextField.getText());
break;
case BINARY:
ep.setValue(valueCheckBox.isSelected());
break;
case BYTE_ARRAY :
break;
}
dispose();
PanStamp ps = ep.getRegister().getDevice();
if (ps.getSyncState() != 1) {
JOptionPane.showMessageDialog(null,
String.format("Device %d is in sleep mode. You need to manually put the device into SYNC mode", ps.getAddress()), "Notice", JOptionPane.INFORMATION_MESSAGE);
}
} catch (NetworkException ex) {
Logger.getLogger(SetValueDialog.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_okButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancelButton;
private javax.swing.JTabbedPane configTabs;
private javax.swing.JPanel networkPanel;
private javax.swing.JButton okButton;
private javax.swing.JComboBox unitComboBox;
private javax.swing.JLabel unitsLabel;
private javax.swing.JCheckBox valueCheckBox;
private javax.swing.JLabel valueLabel;
private javax.swing.JTextField valueTextField;
// End of variables declaration//GEN-END:variables
private final Endpoint ep;
}